#include "StdAfx.h"
#include "DownLoadTaskMgr.h"

CDownLoadTaskMgr::CDownLoadTaskMgr(void)
{
}

CDownLoadTaskMgr::~CDownLoadTaskMgr(void)
{
}


IDownLoadTask* CDownLoadTaskMgr::FindTask(const sha1_hash& urlhash)
{

	AUTOLOCK_CS(tasktable);
	CTaskTable::iterator it = m_TaskTable.find(urlhash);
	if (m_TaskTable.end() != it)
	{
		return it->second;
	}

	return NULL;
}

HRESULT CDownLoadTaskMgr::AddTask(const sha1_hash& urlhash,IDownLoadTask* pTask)
{
	AUTOLOCK_CS(tasktable);
	CTaskTable::iterator it = m_TaskTable.find(urlhash);
	if (it == m_TaskTable.end())
	{
		m_TaskTable[urlhash] = pTask;
		return S_OK;
	}
	
	return S_FALSE;
}

HRESULT CDownLoadTaskMgr::RemoveTask(const sha1_hash& urlhash)
{
	AUTOLOCK_CS(tasktable);
	CTaskTable::iterator it = m_TaskTable.find(urlhash);

	if (it != m_TaskTable.end())
	{
		m_TaskTable.erase(it);
		return S_OK;
	}

	return S_FALSE;
}

CHashList CDownLoadTaskMgr::GetAllTask()
{
	AUTOLOCK_CS(tasktable);
	CHashList hashList;
	CTaskTable::iterator it = m_TaskTable.begin();
	for (; it != m_TaskTable.end(); it++)
	{
		hashList.insert(hashList.end() , it->first);
	}

	return hashList;
}



VOID CDownLoadTaskMgr::Clear()
{
	AUTOLOCK_CS(tasktable);
	
	m_TaskTable.clear();
}